/* mikro-recodes.do --- 
 * 
 * Filename: mikro-recodes.do
 * Description: Recodes fuer Mikro-Daten in separater Datei
 * Author: Kai Arzheimer
 * Created: Fri Mar 11 09:22:39 2011 (+0100)
 * Version: 1.0
 * Last-Updated: Wed Jun  1 17:45:14 2011 (+0200)
 * By: Kai Arzheimer
 *     Update #: 41
 * reads: gles1103-pre13.dta
 * writes: prepost
 * Compatibility: 11.1
 * 
 */

/* Commentary: 
 * 
 * recodes fuer mikro-Daten moeglichst alle in separate Datei auslagern
 * 
 */

/* Change log:
 * 
 * 
 */

/* Code: */


version 11.1
clear all
set mem 200m
capture log close
capture cmdlog close
log using "mikro-recodes-log.txt",replace text
cmdlog using "mikro-recodes-cmds-log.txt",replace

use ~/Work/blauband2009/blauband2009-data/individualdaten/pre-post/gles1103-pre13.dta

* Mit Hilfsdatei mergen, um virtuelle Points zu bekommen
merge 1:1 lfd using ~/Work/blauband2009/blauband2009-data/individualdaten/pre-post/za5302-virtuelle-points.dta
drop _merge

*Ost-Variable
gen ost = quelle==1
lab val ost janein

* Evtl. wollen wir die svy-Gewichtung mit Wahlkreisen und mit Points machen. Dazu brauchen wir eine Variable mit der Zahl der Wahlkreise pro Stratum
gen int zahlwks = 57 if ost
replace zahlwks = 242 if !ost
lab var zahlwks "Zahl Wahlkreise in Ost/West"

* Welches Gewicht verwenden? Fuer gesamtdeutsche Analysen am besten IPFWEIGHT_GES -> umbenennen
clonevar ipfwges = IPFWEIGHT_GES

*Und die getrennten ost/west-Gewichte
clonevar ipfwost = IPFWEIGHT_OST
clonevar ipfwwest = IPFWEIGHT_WEST

* Nicht klar, ob ipfwges f�r svyset geeignet ist. Besser eine Variable, die im Westen ipfwwest enth�lt und im osten ipfwost
gen ipfwregion = ipfwwest if !ost
replace ipfwregion = ipfwost if ost
lab var ipfwregion "regionales ipf"

lab def janein 1 "ja" 0 "nein"

* Mann
gen male= vn1==1
lab val male janein

* Konfession. Wir unterscheiden nur zwischen Prot, Kath, Andere(keine). Missings rekodieren wir auf letzteres.
* Freikirchen machen wir zu Evangelen
recode vn79 (1/2=1 prot) (3=2 kath) (4/99=0 andere),gen(konfession)
lab var konfession "Religionsgruppe"

* Kirchgangsh�ufigkeit
recode vn80 (97=1) (98/99=.),gen(kiga)
	
* 0 als niedrigster Wert
replace kiga = kiga -1
lab var kiga "Kirchgangsh�ufigkeit"	

* Politisches Interesse
recode vn217 (98 99=.),gen(polint)
replace polint = 5 - polint
lab var polint "Politisches Interesse"
lab def polint 0 "�berhaupt nicht" 1 "weniger stark" 2 "mittelm��ig" 3 "ziemlich stark" 4 "sehr stark"
lab val polint polint

*Alter
clonevar alter = vn542

*kategorisieren - vier Gruppen
egen alterkat=cut(alter), at(15,36,50,66,110)
*Dummies erzeugen
tab alterk,gen(altd)

*Demokratiezufriedenheit
recode vn291 (1=5) (2=4) (4=2) (5=1) (else=.),gen(demozufr)
lab var demozufr "Zufriedenheit Demokratie"

*Zeitpunkt Wahlentscheidung
clonevar zeitpunktwahlent = n155
recode zeitpunktwahlent (6/101=.)

***************************************************************
* Skalometer
*************************************************************** 
* Linkspartei und andere Parteien. F�r Union nehmen wir
* MW der beiden Skalometer, ggf. einen Wert falls der andere missing

* Missings setzen

foreach v of varlist vn165*  {
	recode `v' (96/99=.)
	replace `v' = `v' - 6
	}


* Union
egen skalounion = rowmean(vn165A vn165B)

gen skalospd= vn165C
gen skalofdp = vn165D
gen skalogruene = vn165E

gen skalolinks= vn165F

* Personen
gen skalomerkel = vn166A
gen skalostein = vn166C
lab var skalostein "Skalometer Steinmeier"
gen skalolafo = vn166F
gen skalogysi = vn166G

* Noch mehr Variablen
gen skaloguttenberg = vn166B
gen skalowesterwelle = vn166D
lab var skalowesterwelle "Skalometer Westerwelle"
gen skalokuenast = vn166E
lab var skalokuenast "Skalometer K�nast"
* gen skaloseehofer = vn166H
* Seehofer in Nachwahl nicht abgefragt?!?

*Missings markieren + und Werte auf abgefragten Bereich transformieren

foreach v of varlist skalomerkel-skalokuenast  {
	recode `v' (96/99=.)
	replace `v' = `v' - 6
	}

*Sinnvollerweise Merkel/Guttenberg und Lafo/Gysi regional kombinieren. Oder sollen wir
*einfach den Mittelwert nehmen?
* Guttenberg hat in Bayern 5 Prozent missings, in den anderen alten L�ndern 12 und im Osten
* 13 Prozent
* Lafo hat im Osten 3.5 und im Westen 5.5, Gysi im Westen 7 und im Osten 3
* Vorschlag w�re: Guttenberg f�r Bayern, Merkel f�r den Rest von Deutschland (qua zwei Parteien)
* F�r Linkspartei Mittelwert aus Gysi und Lafo, ersetzen falls einer fehlt
* Das gilt auch f�r die Union

gen skalomerkelgutt = skalomerkel if land !=9
lab var skalomerkelgutt "Skalometer Merkel/(zu Guttenberg)"
replace skalomerkelgutt = skaloguttenberg if land == 9
replace skalomerkelgutt = skaloguttenberg if land != 9 & skalomerkel == .
replace skalomerkelgutt = skalomerkel if land == 9 & skaloguttenberg == . 

* Linkspartei
egen skalogysilafo = rowmean(skalogysi skalolafo)
lab var skalogysilafo "Skalometer Gysi/Lafontaine"


* Alternative Partei (nur Nachwahl) "Haben Sie im Vorfeld der Bundestagswahl �berlegt,
* Ihre Zweitstimme vielleicht auch einer anderen Partei als XY zu geben?"
* Interessant w�ren hier f�r Linksparteiw�hler SPD und gruene
* Alternativen B,C werden praktisch nicht erw�hnt und fallen raus

* SPD als Alternative
gen spdalternativ = .
replace spdalternativ = 0 if n105==2
replace spdalternativ = 0 if n105== 1 & n106A !=4
replace spdalternativ = 1 if n105== 1 & n106A ==4
lab var spdalternativ "SPD als Alternative"
lab val spdalternativ janein

* GRUENE als Alternative
gen gruenealternativ = .
replace gruenealternativ = 0 if n105==2
replace gruenealternativ = 0 if n105== 1 & n106A !=6
replace gruenealternativ = 1 if n105== 1 & n106A ==6
lab var gruenealternativ "GRUENE als Alternative"
lab val gruenealternativ janein

*Eigene Wirtschaftslage aktuell
recode vn179 (5=1) (4=2) (2=4) (1=5) (6/99=.),gen(iwla)
lab def wila 1 "sehr schlecht" 2 "schlecht" 3 "teils/teils" 4 "gut" 5 "sehr gut"
lab var iwla "eigene wirtschaftliche Lage aktuell"
lab val iwla wila

*Eigene Wirtschaftslage prospektiv
recode vn181 (5=1) (4=2) (2=4) (1=5) (6/99=.),gen(iwlp)

lab var iwlp "eigene wirtschaftliche Lage prospektiv"
lab val iwlp wila

*Evtl. Wertebatterie auswerten

*Evtl. Probleme auswerten

* sozio�knomische Dimension SPD und PDS. Umkodieren so da� hohe Werte rechts

recode vn192C (12/1000=.),gen(socoecspd)
replace socoecspd = 12- socoecspd
lab var socoecspd "soziooekonomische Position SPD"
lab def socoec 1 "mehr sozialstaatliche Leistungen" 11 "weniger Steuern"
lab val socoecspd socoec

recode vn192F (12/1000=.),gen(socoeclinke)
replace socoeclinke = 12- socoeclinke
lab var socoeclinke "soziooekonomische Position LINKE"
lab val socoeclinke socoec

*Eigene Position
*Soc-Oec
recode vn193 (12/1000=.),gen(socoecego)
replace socoecego = 12- socoecego
lab var socoecego "soziooekonomische Position Ego"
lab val socoecego socoec

*Libert�r-autorit�r Linke
recode vn194F (12/1000=.),gen(libautlinke)
lab var libautlinke "libert�r-autorit�re Position LINKE"
lab def libaut 1 "mehr Zugang f�r Migranten" 11 "weniger Zugang f�r Migranten"
lab val libautlinke libaut


* LibAut
recode vn194C (12/1000=.),gen(libautspd)
lab var libautspd "libert�r-autorit�re Position SPD"
lab val libautspd libaut


* Libert�r/autorit�re Dimension Selbst
recode vn195 (12/1000=.),gen(libautego)
lab var libautego "libert�r-autorit�re Position Ego"
lab val libautego libaut



*Salienz �konomische Dimension
recode vn260 (98/99=.),gen(oeksalienz)
replace oeksalienz = 6 - oeksalienz

*Salienz libert�r-autorit�re Dimension
recode vn262 (98/99=.),gen(libautsalienz)
replace libautsalienz = 6 - libautsalienz

* Links-Rechts-Selbsteinstufung (global)
recode vn190 (97/99=.),gen(lrs)
lab var lrs "Links-Rechts-Position Ego"

*Zentrieren wg. Interaktionen
gen lrsz = lrs - 6
lab var lrsz "Links-Rechts-Position Ego (zentriert)"

*Sozialismus gute Idee, schlecht ausgefuehrt
recode vn130F (98/99=.),gen(prosozialismus)

* Gesellschaft insgesamt ungerecht (nur Nachwahl)
recode n293 (6/1000=.),gen(gesungerecht)

*Evtl. libert�r-autorit�re Dimension ber�cksichtigen?


***************************************************************
* Parteiidentifikationen
*************************************************************** 


*Linkspartei-Identifikation
recode vn135A (0/6=0) (7=1) (8/42=0) (98/99=.),gen(linksid)
lab var linksid "Identifikation Linkspartei"
lab val linksid janein

*SPD-Identifikation
recode vn135A (0/3=0) (4=1) (5/42=0) (98/99=.),gen(spdid)
lab var spdid "Identifikation SPD"
lab val spdid janein

*Wo wir dabei sind, gleich noch Identifikationen fuer FDP, Union, Gr�ne

*Union
recode vn135A (2/3=1) (4/42=0) (98/99=.),gen(unionid)
lab var unionid "Identifikation Union"
lab val unionid janein

*FDP
recode vn135A (2/4=0) (5=1) (6/42=0) (98/99=.),gen(fdpid)
lab var fdpid "Identifikation FDP"
lab val fdpid janein

*Gr�ne
recode vn135A (2/5=0) (6=1) (7/42=0) (98/99=.),gen(grueneid)
lab var grueneid "Identifikation Gruene"
lab val grueneid janein



*Ueberhaupt eine ID?
recode vn135A (0/40=1) (42=0) (98/99=.),gen(anyid)
lab var anyid "Identifikation beliebige Partei"
lab val anyid janein

recode vn135A (0/40=0) (42=1) (98/99=.),gen(noid)
lab var noid "Keine Identifikation"
lab val noid janein

* Wir brauchen noch eine einheitliche ID-Variable.
* Kodierung wie bei wahl2 weiter unten

recode vn135A (2 3 = 1 Union) (4=2 SPD) (5=4 FDP) (6 = 3 Gruene) (7= 5 Linke) (40 98 99 = .) (42= 6 Keine),gen(pid)
lab var pid "Einheitliche PI-Variable"
note pid: "Kodierung wie wahl2. 6 fuer Analyse vermutlich auf missing"
clonevar pidmitkeine = pid
mvdecode pid,mv(6=.a)

* St�rke PID
recode vn136 (98/99=.) (97=.a),gen(strkpid)
replace strkpid = 5 - strkpid
lab var strkpid "St�rke PID"
replace strkpid = .a if vn136 == 97
note strkpid: ".a = Keine PI vorhanden"

lab def strkpid 0 "sehr schwach" 1 "ziemlich schwach" 2 "m��ig" 3 "ziemlich stark" 4 "sehr stark"
lab val strkpid strkpid

* Dauer rentiert sich nicht wirklich - nur vier Prozent weniger als "seit ein paar Jahren"

* Heroische Codierung: Wir kombinieren St�rke und Richtung zu einer Variablen. Wer keine ID f�r eine Partei hat, bekommt null
* Bei sehr schwacher ID 1 ... d.h. wir m�ssen schieben
* Und das missing .a ber�cksichtigen
* Zur Sicherheit klonen wir

lab def pidmetrisch 0 "nicht vorhanden" 1 "sehr schwach" 2 "ziemlich schwach" 3 "m��ig" 4 "ziemlich stark" 5 "sehr stark"

clonevar tempstrkpid = strkpid
recode tempstrkpid (.a=-1)
replace tempstrkpid = tempstrkpid + 1


foreach var of varlist linksid spdid unionid fdpid grueneid   {
	clonevar `var'metr = `var'
	* varlabel �ndern
	local templabel : variable label `var'
	local templabel "`templabel' (metrisch)"
	lab var `var'metr "`templabel'"
	lab val `var'metr pidmetrisch
	replace `var'metr = `var'metr * tempstrkpid
	}


* drop tempstrkpid



*Diverse Items zu Gerechtigkeitsvorstellungen - wichtig f�r Parteiwahl, wahrscheinlich
* weniger wichtig f�r Linkspartei Ost/West-Vergleich

*Abitur bis einschlie�lich FH-Reife
recode vn9A (1/3=0) (5=1) (else=.),gen(abitur)
lab var abitur "Abitur/FH-Reife"
lab val abitur janein

*Hauptschule/ohne Abschlu�
recode vn9A (1/2=1) (3/5=0) (else=.),gen(bildlow)
lab var bildlow "Hauptschulabschlu�/kein Abschlu�"
lab val bildlow janein


*Erwerbst�tigkeit - rekodieren auf prek�re Verh�ltnisse (Midi, Mini, Kurzarbeit), arbeitslos, Rentner, erwerbst�tig(teil/voll)

recode vn17 (1/3=0) (4/5=1) (6=0) (7/8=1) (9/15=0) (97/99=.), gen(prekaer)
recode vn17 (1/5=0) (6=1) (7/15=0) (97/99=.), gen(arbeitslos)
recode vn17 (1/10=0) (11=1) (12/15=0) (97/99=.), gen(rentner)

lab var prekaer "Mini/Midi-Job, Kurzarbeit"
lab var arbeitslos "arbeitslos"
lab var rentner "Rentner inkl. Vorruhestand"

lab val prekaer janein
lab val arbeitslos janein
lab val rentner janein

*Selbsteinstufung als Unterschicht/Arbeiterschicht

recode vn76 (1/2=1) (3/6=0) (else=.),gen(arbeiter)
lab var arbeiter "Selbsteinstufung als Unterschicht/Arbeiterschicht"
lab val arbeiter janein

*Gewerkschaftsmitgliedschaft - warum mu� das aus zwei Variablen kombiniert werden?


recode n86A (1=0) (2/3=1) (99/1000=.),gen(gewerkschaft)
replace gewerkschaft = 1 if v337 == 1
replace gewerkschaft = 0 if v337 == 2
lab var gewerkschaft "Gewerkschaftsmitglied"
lab val gewerkschaft janein


*Familienstand? Angst Stellenverlust/Wechsel?


*Nicht ganz unwichtig: Wahlentscheidung. Es gibt hier viele Variablen f�r Vor- und Nachwahl

recode n169_2A (21/24=0) (25=1) (26/28=0) (else=.), gen(linksparteiwahl)
replace linksparteiwahl=0 if (v254_2A>20 & v254_2A <25) | (v254_2A>25 & v254_2A<29)
replace linksparteiwahl=1 if v254_2A==25
lab var linksparteiwahl "Linkspartei gewaehlt/beabsichtigt"
lab val linksparteiwahl janein


*Das ganze nochmal ueber alle relevanten Parteien fuer mlogit etc.
recode n169_2A (21= 1 union)  (22=2 spd) (23=3 gruene) (24=4 fdp) (25=5 linke) (26/28=6 npdrepandere) (97/102=.) ,gen(wahl)
recode v254_2A (21= 1 union)  (22=2 spd) (23=3 gruene) (24=4 fdp) (25=5 linke) (26/28=6 npdrepandere) (97/102=.) ,gen(wahl2)
replace wahl=wahl2 if wahl==.

lab var wahl "kombinierte Vor-/Nachwahlentscheidung"
* Sieht gut aus


* Ich denke es ist sinnvoll, Nichtw�hler, andere W�hler und missing zusammenzufassen

replace wahl2 = wahl
replace wahl2 = 6 if wahl2==.
lab var wahl2 "kombinierte Vor-/Nachwahlentscheidung (neu)"
lab def wahl2 6 "nicht andere", modify

* Variable PI-Wahl (nur f�r PI-Haber)
* 2: Wahl entsprechend PID
* 1: Wahl, aber nicht entsprechend PI
* 0: Nichtwahl
* . : keine PID bzw. wahl2=.
gen pidwahl = .
lab var pidwahl "Wahl entsprechend PID?"
lab def pidwahl 0 "Nichtwahl" 1 "Wahl entgegen PID" 2 "Wahl nach PID"
lab val pidwahl pidwahl
replace pidwahl = 2 if pid == wahl2
replace pidwahl = 1 if wahl2 <6 & pid <6 & pid != wahl2
replace pidwahl = 0 if wahl2 == 6 & pid <6


*Ganz trivial noch die LR-Einstufung der Partei in Ost und West

recode vn188F (95/99=.),gen(lrlinke)
lab var lrlinke "Links-Rechts-Einstufung Linke"
ttest lrlinke ,by(ost)

* Allgemeine LR-Position f�r andere Parteien. Union?
* Fassen wir zusammen: CDU au�erhalb Bayerns und umgekehrt
recode vn188C (95/99=.),gen(lrspd)
lab var lrspd "Link-Rechts-Einstufung SPD"

recode vn188D (95/99=.),gen(lrfdp)
lab var lrfdp "Link-Rechts-Einstufung FDP"

recode vn188E (95/99=.),gen(lrgruene)
lab var lrgruene "Link-Rechts-Einstufung Gruene"

recode vn188A (95/99=.),gen(lrunion)
recode vn188B (95/99=.),gen(lrcsu)
* Befragte in Bayern bekommen der CSU-Wert
replace lrunion = lrcsu if land == 9 & lrcsu != .
lab var lrunion "Link-Rechts-Einstufung Union"
* Wenige CDU Missings au�erhalb Bayerns, die man durch CSU ersetzen k�nnte
* und umgekehrt. Wir lassen es so.

* Jetzt brauchen wir Egos Distanz von den Parteien. Vermutlich ist Betrag am sinnvollsten

gen lrdistunion = abs(lrs - lrunion )
lab var lrdistunion "Distanz Ego-Union"

gen lrdistspd = abs(lrs - lrspd )
lab var lrdistspd "Distanz Ego-SPD"

gen lrdistfdp = abs(lrs - lrfdp )
lab var lrdistfdp "Distanz Ego-Fdp"

gen lrdistgruene = abs(lrs - lrgruene )
lab var lrdistgruene "Distanz Ego-Gruene"

gen lrdistlinke = abs(lrs - lrlinke )
lab var lrdistlinke "Distanz Ego-Linke"


* Noch einfacherere Darstellung: Wieviel Prozent stufen die Partei auf mindestens einer der beiden Skalen rechts von der Mitte ein
gen linksparteikorrekt=0
replace linksparteikorrekt=1 if socoeclinke <6 & libautlinke <6
replace linksparteikorrekt = . if socoeclinke == . | libautlinke == .

lab var linksparteikorrekt "Linkspartei auf beiden Dimensionen links von der Mitte eingestuft"
lab val linksparteikorrekt yesno




gen linkparteipositionkomplettmiss = linksparteikorrekt == .
lab var linkparteipositionkomplettmiss "Linkspartei auf wenigstens einer Dimension nicht eingeordnet"
lab val linkparteipositionkomplettmiss yesno



* IDs clonen. Evtl. �berfl�ssig
clonevar id1=unionid
clonevar id2=spdid
clonevar id3=grueneid
clonevar id4=fdpid
clonevar id5=linksid
clonevar id6=noid


* LR-Distanzen m�ssen auf jeden Fall gecloned werden
clonevar lrdist1 = lrdistunion
clonevar lrdist2 = lrdistspd
clonevar lrdist3 = lrdistgruene
clonevar lrdist4 = lrdistfdp
clonevar lrdist5 = lrdistlinke



******************************************************************************
* Wir haben skurrilerweise keine Informationen �ber das sampling im
* Wir wissen aber, da� wir separate samples f�r Ost und West haben -> Strata
* Ersatzweise betrachten wir die Wahlkreise als PSU -> sollte
* konservativ sein
* Jetzt habe ich von gesis "virtuelle samplepoints" bekommen. Gl�ckauf!
******************************************************************************


**************
* svysteting *
**************


svyset pointz [pweight=ipfwges],strata(ost)

******************************************************************************
* Das gibt ungef�hr dieselben Standardfehler wie ,cluster
* Oder m��te es so sein:  svyset wkrnr [pw=ipfwregion] , strata(ost) fpc(zahlwks)  || pointz ,  singleunit(scaled)
* Das macht den Fehler noch mal gr��er. Wie funktioniert das ADM-Design?
* Gesampelt wird aus den Stimmbezirken, d.h eigentlich braucht man den Wahlkreis nicht. Allerdings kann man nicht annehmen, das die Bezirke im WK unabh�ngig sind?!?
******************************************************************************



save prepost, replace


exit,clear



/*  mikro-recodes.do ends here */
